import { API_CONFIG } from './index'

/**
 * 配置工具函数
 */

/**
 * 获取完整的API URL
 * @param path API路径，如 '/products'
 * @returns 完整的API URL
 */
export const getApiUrl = (path: string): string => {
  // 确保路径以 / 开头
  const normalizedPath = path.startsWith('/') ? path : `/${path}`
  return `${API_CONFIG.BASE_URL}${normalizedPath}`
}

/**
 * 获取后端完整URL（用于开发环境调试）
 * @param path API路径
 * @returns 完整的后端URL
 */
export const getBackendUrl = (path: string): string => {
  const normalizedPath = path.startsWith('/') ? path : `/${path}`
  return `${API_CONFIG.BACKEND_URL}${normalizedPath}`
}

/**
 * 检查是否为开发环境
 * @returns 是否为开发环境
 */
export const isDevelopment = (): boolean => {
  return API_CONFIG.ENV === 'development'
}

/**
 * 检查是否为生产环境
 * @returns 是否为生产环境
 */
export const isProduction = (): boolean => {
  return API_CONFIG.ENV === 'production'
}

/**
 * 检查是否为测试环境
 * @returns 是否为测试环境
 */
export const isTest = (): boolean => {
  return API_CONFIG.ENV === 'test'
}

/**
 * 获取环境信息
 * @returns 环境信息对象
 */
export const getEnvironmentInfo = () => {
  return {
    env: API_CONFIG.ENV,
    baseUrl: API_CONFIG.BASE_URL,
    backendUrl: API_CONFIG.BACKEND_URL,
    appTitle: API_CONFIG.APP_TITLE,
    enableLog: API_CONFIG.ENABLE_LOG,
    logLevel: API_CONFIG.LOG_LEVEL
  }
}

/**
 * 格式化错误信息
 * @param error 错误对象
 * @returns 格式化的错误信息
 */
export const formatErrorMessage = (error: any): string => {
  if (error?.response?.status) {
    const status = error.response.status
    return API_CONFIG.STATUS_MESSAGES[status] || API_CONFIG.ERROR_MESSAGES.UNKNOWN_ERROR
  }
  
  if (error?.code === 'ECONNABORTED') {
    return API_CONFIG.ERROR_MESSAGES.TIMEOUT_ERROR
  }
  
  if (!error?.response) {
    return API_CONFIG.ERROR_MESSAGES.NETWORK_ERROR
  }
  
  return error?.response?.data?.error || error?.message || API_CONFIG.ERROR_MESSAGES.UNKNOWN_ERROR
}

/**
 * 日志记录函数
 * @param level 日志级别
 * @param message 日志消息
 * @param data 相关数据
 */
export const log = (level: 'debug' | 'info' | 'warn' | 'error', message: string, data?: any) => {
  if (!API_CONFIG.ENABLE_LOG) return
  
  const timestamp = new Date().toISOString()
  const logMessage = `[${timestamp}] [${level.toUpperCase()}] ${message}`
  
  switch (level) {
    case 'debug':
      console.debug(logMessage, data)
      break
    case 'info':
      console.info(logMessage, data)
      break
    case 'warn':
      console.warn(logMessage, data)
      break
    case 'error':
      console.error(logMessage, data)
      break
  }
}

/**
 * 调试日志（仅在开发环境显示）
 * @param message 消息
 * @param data 数据
 */
export const debugLog = (message: string, data?: any) => {
  if (isDevelopment()) {
    log('debug', message, data)
  }
} 